import request from '@/utils/request'

// 查询项目功能列表
export function listFun(query) {
  return request({
    url: '/ai_smart/fun/list',
    method: 'get',
    params: query
  })
}

// 查询项目功能详细
export function getFun(id) {
  return request({
    url: '/ai_smart/fun/' + id,
    method: 'get'
  })
}

// 查询项目功能详细
export function getFunNo() {
  return request({
    url: '/ai_smart/fun/getProjectFunNo' ,
    method: 'get'
  })
}

// 新增项目功能
export function addFun(data) {
  return request({
    url: '/ai_smart/fun',
    method: 'post',
    data: data
  })
}

// 修改项目功能
export function updateFun(data) {
  return request({
    url: '/ai_smart/fun',
    method: 'put',
    data: data
  })
}

// 删除项目功能
export function delFun(id) {
  return request({
    url: '/ai_smart/fun/' + id,
    method: 'delete'
  })
}

// 调用ai接口-批量生成
export function aiCreatePoint(data) {
  return request({
    url: '/ai_smart/fun/ai_create_fun_point/',
    method: 'post',
    data: data
  })
}

// 调用ai接口-单个生成
export function aiCreateSignalPoint(data) {
  return request({
    url: '/ai_smart/fun/ai_create_signal_fun_point/',
    method: 'post',
    data: data
  })
}


// 调用ai接口-一键生成
export function aiCreateAllPoint(data) {
  return request({
    url: '/ai_smart/fun/ai_create_All_fun_point/',
    method: 'post',
    data: data
  })
}


// 调用功能树接口
export function funTreeSelect() {
  return request({
    url: '/ai_smart/fun/get_fun_tree/',
    method: 'post'
  })
}

// 获取ai批量生成测试用例进度
export function getBatchTaskRecord() {
  return request({
    url: '/ai_smart/fun/get_ai_create_batch_test_point_task_record/' + new Date().getTime(),
    method: 'get'
  })
}

// 获取新版的功能详情信息(点击树形结构，右侧显示的信息)
export function getFunInfoNew(funNo) {
  return request({
    url: '/ai_smart/fun/get_fun_info_new/' +funNo,
    method: 'post'
  })
}


// 新增项目功能->新版
export function addFunNew(data) {
  return request({
    url: '/ai_smart/fun/new',
    method: 'post',
    data: data
  })
}

// 修改项目功能
export function updateFunNew(data) {
  return request({
    url: '/ai_smart/fun/new',
    method: 'put',
    data: data
  })
}

// 添加功能权限
export function addFunRolePermission(data) {
  return request({
    url: '/ai_smart/fun/role_permission',
    method: 'put',
    data: data
  })
}

// 修改功能权限
export function updateFunRolePermission(data) {
  return request({
    url: '/ai_smart/fun/role_permission',
    method: 'post',
    data: data
  })
}

// 删除功能权限
export function deleteFunRolePermission(data) {
  return request({
    url: '/ai_smart/fun/role_permission',
    method: 'delete',
    data: data
  })
}

// 一键生成测试点和用例
export function aiCreateAllPointAndCase(data){
  return request({
    url: '/ai_smart/fun/ai_create_all_point_and_case',
    method: 'post',
    data: data
  })
}


// 一键生成未生成的测试点和用例
export function aiCreateAllIncrementPointAndCase(data){
  return request({
    url: '/ai_smart/fun/ai_create_all_increment_point_and_case',
    method: 'post',
    data: data
  })
}

// 需求编辑后的保存操作
export function save(data){
  return request({
    url: '/ai_smart/fun/save',
    method: 'post',
    data: data
  })
}

// 需求审核操作
export function check(data){
  return request({
    url: '/ai_smart/fun/check',
    method: 'post',
    data: data
  })
}

export function deepCopy(obj){
  // 热知识：用 typeof 判断 null、数组、对象，都是返回 'object'，其他情况则对应返回 string number boolean undefined function symbol
    if (typeof obj !== "object" || obj === null) return obj;
    // 初始化。要么数组，要么是对象，数组也是特殊的对象，只是key为下标，所以下面使用 for in
    let copy = Array.isArray(obj) ? [] : {};
    for (let key in obj) {
      // 只复制自身属性而非继承属性
      // Object.hasOwn() 相当于 Object.prototype.hasOwnProperty.call(obj, prop)
      if (Object.hasOwn(obj, key)) {
        // 递归调用 deepCopy 函数进行深度拷贝
        copy[key] = deepCopy(obj[key]);
      }
    }

    return copy;
}